Portfolios: Estimating Parameters


Kerry Back

BUSI 721, Fall 2022
JGSB, Rice University

Recap

Portfolio mean is the weighted average of asset means.

Portfolio std dev is less than the weighted average of asset std devs.

This session: How do we estimate asset means and variances?

Asset Means

  1. Past Sample
  2. Theory
  3. Fundamental Research  
  4. Quantitative - link returns to quantifiable characteristics

Asset standard deviations

  1. Past sample
  2. Quantitative - link std devs to quantifiable characteristics

Sampling Distributions

Suppose returns \(r_{1},\cdots,r_{n}\) are independent draws from a normal \((\mu,\sigma^2)\) distribution.

Let \(\bar{r}\)= sample mean and
s= sample std dev = \(\sqrt{\sum_{i=1}^n \frac{(r_{i}-\bar{r})^2}{n-1}}\)

Then, \(\bar{r}\) is normal \((\mu,\sigma^2/n)\) and

\[\frac{(n-1)s^2}{\sigma^2}\]

is \(\chi^2(n-1)\).

Confidence Intervals

Consider a sample with \(n=25\), \(\bar{r}=0.12\), \(s=0.30\).

The estimated std dev (std error) of \(\bar{r}\) is \(0.30/\sqrt{25}=0.06\).

A \(95\%\) confidence interval for \(\mu\) is

\[0.12 ± 1.96 \times 0.06 = [0.013,0.227]\]

A similarly wide confidence interval for \(\sigma\) is implied by the \(\chi^2\) distribution.

Sampling More Frequently

If we sample monthly, weekly, \(\ldots\) then we have more data points, so estimates are more accurate .

Sampling More Frequently

When we scale to annual parameters,

  • accuracy gain vanishes for mean
  • accuracy gain persists for variance

We’ll demonstrate this via simulation.

Simulation

Simulate monthly returns for 25 years. Compound to get annual returns.

Compute monthly mean and variance and annual mean and variance.

Repeat 1,000 times and compute distributions.

from scipy.stats import norm
import numpy as np

# monthly parameters
mu, sigma = 0.01, .3/np.sqrt(12)  

# monthly returns: 25 years, 1,000 times
mrets = norm.rvs(loc=mu, scale=sigma, size=12*25*1000)
mrets = mrets.reshape(12, 25, 1000)
mmeans = np.mean(mrets, axis=(0,1))
msds = np.std(mrets, axis=(0,1))

# compound to annual returns
arets = np.prod(1+mrets, axis=0) - 1
ameans = np.mean(arets, axis=0)
asds = np.std(arets, axis=0)

Means from 1,000 samples.
Using monthly data doesn’t help.

Estimation of the std dev is much more accurate with monthly data.

Summary

  • Very difficult to estimate expected returns from past samples
  • Can reasonably estimate std devs from past samples when std devs are constant
  • But may want to take into account time-varying volatility